Loading required package: ggplot2
Loading required package: reshape2
# importing our data
data = data.import()
Read 5 items
Read 3 items
Read 3 items
Read 5 items
Read 3 items
Read 3 items
Read 4 items
Read 4 items
Read 18 items
Read 6 items
Read 8 items
Read 6 items
Read 18 items
Read 6 items
Read 8 items
Read 6 items
Read 18 items
Read 6 items
Read 8 items
Read 6 items
Read 9 items
Read 3 items
Read 2 items
Read 6 items
Read 13 items
Read 4 items
Read 7 items
Read 4 items
Read 3 items
Read 2 items
Read 2 items
the condition has length > 1 and only the first element will be used
head(data)

Overview

summary(data)
    dtPosix                          dt                                      dt_iso        city_id             temp          temp_min        temp_max    
 Min.   :2017-01-01 00:00:00   Min.   :1.483e+09   2017-03-18 06:00:00 +0000 UTC:   3   Min.   :2950159   Min.   :263.1   Min.   :261.1   Min.   :263.7  
 1st Qu.:2017-04-01 10:45:00   1st Qu.:1.491e+09   2017-03-30 01:00:00 +0000 UTC:   3   1st Qu.:2950159   1st Qu.:277.1   1st Qu.:277.1   1st Qu.:277.4  
 Median :2017-07-03 15:30:00   Median :1.499e+09   2017-03-30 02:00:00 +0000 UTC:   3   Median :2950159   Median :283.1   Median :283.1   Median :283.1  
 Mean   :2017-07-03 03:05:03   Mean   :1.499e+09   2017-03-30 03:00:00 +0000 UTC:   3   Mean   :2950159   Mean   :283.4   Mean   :283.0   Mean   :283.7  
 3rd Qu.:2017-10-04 02:15:00   3rd Qu.:1.507e+09   2017-03-30 04:00:00 +0000 UTC:   3   3rd Qu.:2950159   3rd Qu.:289.1   3rd Qu.:289.1   3rd Qu.:289.1  
 Max.   :2017-12-31 23:00:00   Max.   :1.515e+09   (Other)                      :9104   Max.   :2950159   Max.   :305.1   Max.   :305.1   Max.   :305.1  
                               NA's   :37          NA's                         :  37   NA's   :37        NA's   :37      NA's   :37      NA's   :37     
    pressure       humidity        wind_speed       wind_deg        rain_3h        clouds_all       weather_id     weather_main        weather_description
 Min.   : 980   Min.   : 14.00   Min.   : 0.00   Min.   :  0.0   Min.   :0.118   Min.   :  0.00   Min.   :200.0   Clouds :3434   Sky is Clear    :2972    
 1st Qu.:1010   1st Qu.: 67.00   1st Qu.: 2.00   1st Qu.:120.0   1st Qu.:0.150   1st Qu.:  0.00   1st Qu.:701.0   Clear  :2973   broken clouds   :2380    
 Median :1016   Median : 81.00   Median : 3.00   Median :230.0   Median :0.380   Median : 75.00   Median :800.0   Rain   :1195   light rain      : 803    
 Mean   :1015   Mean   : 77.17   Mean   : 3.43   Mean   :197.5   Mean   :0.672   Mean   : 45.13   Mean   :728.3   Mist   : 598   mist            : 598    
 3rd Qu.:1021   3rd Qu.: 93.00   3rd Qu.: 5.00   3rd Qu.:270.0   3rd Qu.:0.889   3rd Qu.: 75.00   3rd Qu.:803.0   Fog    : 383   scattered clouds: 536    
 Max.   :1043   Max.   :100.00   Max.   :14.00   Max.   :360.0   Max.   :9.865   Max.   :100.00   Max.   :804.0   (Other): 536   (Other)         :1830    
 NA's   :37     NA's   :37       NA's   :37      NA's   :37      NA's   :9066    NA's   :37       NA's   :37      NA's   :  37   NA's            :  37    
  weather_icon     weekday         hours         chb.all       chb.background    chb.traffic       cht.all       cht.background   cht.traffic    
 01n    :1593   sun    :1331   4      : 392   Min.   :0.2000   Min.   :0.1000   Min.   :0.200   Min.   : 0.000   Min.   : 0.00   Min.   : 0.000  
 04d    :1390   wed    :1316   6      : 392   1st Qu.:0.6667   1st Qu.:0.5000   1st Qu.:0.750   1st Qu.: 1.333   1st Qu.: 1.00   1st Qu.: 1.500  
 01d    :1379   fri    :1314   1      : 391   Median :0.9333   Median :0.7000   Median :1.050   Median : 2.000   Median : 1.00   Median : 2.500  
 04n    :1171   thu    :1303   3      : 390   Mean   :1.1730   Mean   :0.9167   Mean   :1.303   Mean   : 2.483   Mean   : 1.81   Mean   : 2.819  
 50n    : 673   tue    :1290   2      : 389   3rd Qu.:1.3667   3rd Qu.:1.1000   3rd Qu.:1.550   3rd Qu.: 3.000   3rd Qu.: 2.00   3rd Qu.: 3.500  
 (Other):2913   (Other):2565   (Other):7165   Max.   :8.9000   Max.   :9.8000   Max.   :9.400   Max.   :19.667   Max.   :24.00   Max.   :18.500  
 NA's   :  37   NA's   :  37   NA's   :  37   NA's   :1        NA's   :162      NA's   :9       NA's   :1        NA's   :161     NA's   :4       
     co.all         co.traffic        no2.all        no2.background    no2.traffic       no2.suburb        no.all         no.background    
 Min.   :0.1000   Min.   :0.1000   Min.   :  3.929   Min.   :  4.00   Min.   :  4.00   Min.   : 1.20   Min.   :  0.4375   Min.   :  0.000  
 1st Qu.:0.2667   1st Qu.:0.2667   1st Qu.: 19.750   1st Qu.: 15.40   1st Qu.: 31.00   1st Qu.: 6.60   1st Qu.:  6.4375   1st Qu.:  1.250  
 Median :0.3500   Median :0.3500   Median : 27.625   Median : 22.40   Median : 44.83   Median :10.80   Median : 13.0000   Median :  2.800  
 Mean   :0.3867   Mean   :0.3867   Mean   : 29.279   Mean   : 25.35   Mean   : 45.88   Mean   :12.94   Mean   : 17.8855   Mean   :  6.473  
 3rd Qu.:0.4500   3rd Qu.:0.4500   3rd Qu.: 36.806   3rd Qu.: 32.60   3rd Qu.: 58.33   3rd Qu.:17.00   3rd Qu.: 23.0000   3rd Qu.:  6.000  
 Max.   :2.2500   Max.   :2.2500   Max.   :144.062   Max.   :171.40   Max.   :187.67   Max.   :66.40   Max.   :273.3125   Max.   :361.800  
 NA's   :1        NA's   :1        NA's   :1         NA's   :1        NA's   :1        NA's   :1       NA's   :1          NA's   :1        
   no.traffic        no.suburb         nox.all       nox.background    nox.traffic        nox.suburb         o3.all       o3.background      o3.traffic  
 Min.   :  1.167   Min.   : 0.000   Min.   :  6.00   Min.   :  5.20   Min.   :  7.833   Min.   :  1.60   Min.   :  0.50   Min.   :  0.00   Min.   : 1.0  
 1st Qu.: 15.333   1st Qu.: 0.200   1st Qu.: 30.69   1st Qu.: 18.20   1st Qu.: 55.333   1st Qu.:  7.00   1st Qu.: 24.17   1st Qu.: 20.00   1st Qu.:11.0  
 Median : 31.143   Median : 0.400   Median : 48.27   Median : 27.00   Median : 94.000   Median : 11.60   Median : 42.50   Median : 38.50   Median :25.0  
 Mean   : 40.297   Mean   : 1.783   Mean   : 56.59   Mean   : 35.22   Mean   :107.422   Mean   : 15.66   Mean   : 44.07   Mean   : 40.46   Mean   :24.3  
 3rd Qu.: 53.500   3rd Qu.: 1.200   3rd Qu.: 71.00   3rd Qu.: 41.60   3rd Qu.:140.333   3rd Qu.: 19.25   3rd Qu.: 60.67   3rd Qu.: 57.50   3rd Qu.:35.0  
 Max.   :419.667   Max.   :90.000   Max.   :561.44   Max.   :723.80   Max.   :828.500   Max.   :189.20   Max.   :142.67   Max.   :138.00   Max.   :72.0  
 NA's   :1         NA's   :1        NA's   :1        NA's   :1        NA's   :1         NA's   :1        NA's   :1        NA's   :2        NA's   :8469  
   o3.suburb         pm10.all      pm10.background    pm10.traffic     pm10.suburb        so2.all        so2.background    so2.traffic     
 Min.   :  0.25   Min.   :  4.00   Min.   :  3.333   Min.   :  5.00   Min.   :  3.00   Min.   :  0.000   Min.   : 0.000   Min.   :  0.000  
 1st Qu.: 25.62   1st Qu.: 13.91   1st Qu.: 12.667   1st Qu.: 16.80   1st Qu.: 10.00   1st Qu.:  0.500   1st Qu.: 0.000   1st Qu.:  1.000  
 Median : 45.00   Median : 18.82   Median : 17.667   Median : 22.40   Median : 14.00   Median :  1.000   Median : 1.000   Median :  1.000  
 Mean   : 45.94   Mean   : 22.70   Mean   : 21.351   Mean   : 26.68   Mean   : 17.29   Mean   :  1.522   Mean   : 1.198   Mean   :  1.844  
 3rd Qu.: 63.00   3rd Qu.: 27.70   3rd Qu.: 26.333   3rd Qu.: 32.20   3rd Qu.: 21.33   3rd Qu.:  1.500   3rd Qu.: 1.000   3rd Qu.:  2.000  
 Max.   :145.00   Max.   :283.73   Max.   :211.667   Max.   :465.40   Max.   :106.33   Max.   :356.000   Max.   :27.000   Max.   :699.000  
 NA's   :1        NA's   :1        NA's   :1         NA's   :1        NA's   :1        NA's   :4         NA's   :27       NA's   :54       
 wind.deg.name     
 Length:9156       
 Class :character  
 Mode  :character  
                   
                   
                   
                   

pm10 over the year

pollutant = "pm10.all"
plot.pollutant(data, pollutant, month = "01", day = "01", title = "1. January with silvester firework peak")

  
plot.pollutant(data, pollutant, month = "01")

plot.pollutant(data, pollutant, month = "02")

plot.pollutant(data, pollutant, month = "03")

plot.pollutant(data, pollutant, month = "04")

plot.pollutant(data, pollutant, month = "05")

plot.pollutant(data, pollutant, month = "06")

plot.pollutant(data, pollutant, month = "07")

plot.pollutant(data, pollutant, month = "08")

plot.pollutant(data, pollutant, month = "09")

plot.pollutant(data, pollutant, month = "10")

plot.pollutant(data, pollutant, month = "11")

plot.pollutant(data, pollutant, month = "12")

chb over the year

pollutant = "chb.all"
plot.pollutant(data, pollutant, month = "01", day = "01", title = "1. January with silvester firework peak")

  
plot.pollutant(data, pollutant, month = "01")

plot.pollutant(data, pollutant, month = "02")

plot.pollutant(data, pollutant, month = "03")

plot.pollutant(data, pollutant, month = "04")

plot.pollutant(data, pollutant, month = "05")

plot.pollutant(data, pollutant, month = "06")

plot.pollutant(data, pollutant, month = "07")

plot.pollutant(data, pollutant, month = "08")

plot.pollutant(data, pollutant, month = "09")

plot.pollutant(data, pollutant, month = "10")

plot.pollutant(data, pollutant, month = "11")

plot.pollutant(data, pollutant, month = "12")

CHT over the year

pollutant = "cht.all"
  
plot.pollutant(data, pollutant, month = "01")

plot.pollutant(data, pollutant, month = "02")

plot.pollutant(data, pollutant, month = "03")

plot.pollutant(data, pollutant, month = "04")

plot.pollutant(data, pollutant, month = "05")

plot.pollutant(data, pollutant, month = "06")

plot.pollutant(data, pollutant, month = "07")

plot.pollutant(data, pollutant, month = "08")

plot.pollutant(data, pollutant, month = "09")

plot.pollutant(data, pollutant, month = "10")

plot.pollutant(data, pollutant, month = "11")

plot.pollutant(data, pollutant, month = "12")

CO over the year

pollutant = "co.all"
plot.pollutant(data, pollutant, month = "01", day = "01", title = "1. January with silvester firework peak")

  
plot.pollutant(data, pollutant, month = "01")

plot.pollutant(data, pollutant, month = "02")

plot.pollutant(data, pollutant, month = "03")

plot.pollutant(data, pollutant, month = "04")

plot.pollutant(data, pollutant, month = "05")

plot.pollutant(data, pollutant, month = "06")

plot.pollutant(data, pollutant, month = "07")

plot.pollutant(data, pollutant, month = "08")

plot.pollutant(data, pollutant, month = "09")

plot.pollutant(data, pollutant, month = "10")

plot.pollutant(data, pollutant, month = "11")

plot.pollutant(data, pollutant, month = "12")

5. NOX over the year

pollutant = "nox.all"
plot.pollutant(data, pollutant, month = "01", day = "01", title = "1. January with silvester firework peak")

  
plot.pollutant(data, pollutant, month = "01")

plot.pollutant(data, pollutant, month = "02")

plot.pollutant(data, pollutant, month = "03")

plot.pollutant(data, pollutant, month = "04")

plot.pollutant(data, pollutant, month = "05")

plot.pollutant(data, pollutant, month = "06")

plot.pollutant(data, pollutant, month = "07")

plot.pollutant(data, pollutant, month = "08")

plot.pollutant(data, pollutant, month = "09")

plot.pollutant(data, pollutant, month = "10")

plot.pollutant(data, pollutant, month = "11")

plot.pollutant(data, pollutant, month = "12")

6. O3 over the year

pollutant = "o3.all"
  
plot.pollutant(data, pollutant, month = "01")

plot.pollutant(data, pollutant, month = "02")

plot.pollutant(data, pollutant, month = "03")

plot.pollutant(data, pollutant, month = "04")

plot.pollutant(data, pollutant, month = "05")

plot.pollutant(data, pollutant, month = "06")

plot.pollutant(data, pollutant, month = "07")

plot.pollutant(data, pollutant, month = "08")

plot.pollutant(data, pollutant, month = "09")

plot.pollutant(data, pollutant, month = "10")

plot.pollutant(data, pollutant, month = "11")

plot.pollutant(data, pollutant, month = "12")

pm10 over the year

pollutant = "so2.all"
plot.pollutant(data, pollutant, month = "01", day = "01", title = "1. January with silvester firework peak")

  
plot.pollutant(data, pollutant, month = "01")

plot.pollutant(data, pollutant, month = "02")

plot.pollutant(data, pollutant, month = "03")

plot.pollutant(data, pollutant, month = "04")

plot.pollutant(data, pollutant, month = "05")

plot.pollutant(data, pollutant, month = "06")

plot.pollutant(data, pollutant, month = "07")

plot.pollutant(data, pollutant, month = "08")

plot.pollutant(data, pollutant, month = "09")

plot.pollutant(data, pollutant, month = "10")

plot.pollutant(data, pollutant, month = "11")

plot.pollutant(data, pollutant, month = "12")

pm10 to wind

ddply(data,~wind_speed,summarise,pm10.all.mean=mean(pm10.all),sd=sd(pm10.all))
ggplot(data, aes(wind_speed,pm10.all, group = wind_speed)) + geom_boxplot() + ylim(0, 70) + stat_summary(fun.y=mean, colour="darkred", geom="point")

ddply(data,~wind.deg.name,summarise,pm10.all.mean=mean(pm10.all),sd=sd(pm10.all))
ggplot(data, aes(wind.deg.name,pm10.all, group = wind.deg.name)) + geom_boxplot() + ylim(0, 70) + stat_summary(fun.y=mean, colour="darkred", geom="point")

ddply(data,~wind.deg.name,summarise,wind_speed.mean=mean(wind_speed),sd=sd(wind_speed))
ggplot(data, aes(wind.deg.name,wind_speed, group = wind.deg.name)) + geom_boxplot() + ylim(0, 15) + stat_summary(fun.y=mean, colour="darkred", geom="point")

LS0tCnRpdGxlOiAiRGF0YSBFeHBsb3JhdGlvbiBvZiBwb2xsdXRhbnRzIHBsdXMgd2VhdGhlciBpbiBCZXJsaW4iCm91dHB1dDoKICBodG1sX2RvY3VtZW50OgogICAgZGZfcHJpbnQ6IHBhZ2VkCiAgcGRmX2RvY3VtZW50OiBkZWZhdWx0CiAgaHRtbF9ub3RlYm9vazogZGVmYXVsdAotLS0KCmBgYHtyIHNldHVwLCBlY2hvPUZBTFNFfQpzb3VyY2UoIi4vZGF0YUltcG9ydC5SIikKbGlicmFyeShsYXR0aWNlKQpyZXF1aXJlKGdncGxvdDIpCnJlcXVpcmUocmVzaGFwZTIpCnJlcXVpcmUocGx5cikKCnBsb3QucG9sbHV0YW50ID0gZnVuY3Rpb24oZGF0YSwgcG9sbHV0YW50Lm5hbWUsIG1vbnRoPSIwMCIsIGRheT0iMDAiLCB0aXRsZT0iIikgewogIGRmID0gZGF0YVtjKCJkdFBvc2l4IiwgcG9sbHV0YW50Lm5hbWUpXQogIGRmID0gbWVsdChkZiwgaWQudmFycyA9ICdkdFBvc2l4JywgdmFyaWFibGUubmFtZSA9ICJwb2xsdXRhbnQiLCB2YWx1ZS5uYW1lID0gInZhbHVlIikKICAKICBpZiAoZGF5ID09ICIwMCIgJiBtb250aCAhPSAiMDAiKQogICAgZGYgPSBzdWJzZXQoZGYsIGZvcm1hdC5EYXRlKGR0UG9zaXgsICIlbSIpPT1tb250aCkKICBlbHNlIGlmIChkYXkgIT0gIjAwIiAmIG1vbnRoICE9ICIwMCIpCiAgICBkZiA9IHN1YnNldChkZiwgZm9ybWF0LkRhdGUoZHRQb3NpeCwgIiVtIik9PW1vbnRoICYgZm9ybWF0LkRhdGUoZHRQb3NpeCwgIiVkIik9PWRheSkKICAKICBwbG90IDwtIGdncGxvdChkZiwgYWVzKGR0UG9zaXgsdmFsdWUpKSArIGdlb21fbGluZShhZXMoY29sb3VyID0gcG9sbHV0YW50KSkKICBwbG90ICsgZ2d0aXRsZSh0aXRsZSkKfSAgCmBgYAoKCmBgYHtyfQojIGltcG9ydGluZyBvdXIgZGF0YQpkYXRhID0gZGF0YS5pbXBvcnQoKQoKaGVhZChkYXRhKQpgYGAKCgojIyBPdmVydmlldwpgYGB7cn0Kc3VtbWFyeShkYXRhKQpgYGAKCiMjIHBtMTAgb3ZlciB0aGUgeWVhcgoKYGBge3J9CnBvbGx1dGFudCA9ICJwbTEwLmFsbCIKCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMDEiLCBkYXkgPSAiMDEiLCB0aXRsZSA9ICIxLiBKYW51YXJ5IHdpdGggc2lsdmVzdGVyIGZpcmV3b3JrIHBlYWsiKQogIApwbG90LnBvbGx1dGFudChkYXRhLCBwb2xsdXRhbnQsIG1vbnRoID0gIjAxIikKcGxvdC5wb2xsdXRhbnQoZGF0YSwgcG9sbHV0YW50LCBtb250aCA9ICIwMiIpCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMDMiKQpwbG90LnBvbGx1dGFudChkYXRhLCBwb2xsdXRhbnQsIG1vbnRoID0gIjA0IikKcGxvdC5wb2xsdXRhbnQoZGF0YSwgcG9sbHV0YW50LCBtb250aCA9ICIwNSIpCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMDYiKQpwbG90LnBvbGx1dGFudChkYXRhLCBwb2xsdXRhbnQsIG1vbnRoID0gIjA3IikKcGxvdC5wb2xsdXRhbnQoZGF0YSwgcG9sbHV0YW50LCBtb250aCA9ICIwOCIpCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMDkiKQpwbG90LnBvbGx1dGFudChkYXRhLCBwb2xsdXRhbnQsIG1vbnRoID0gIjEwIikKcGxvdC5wb2xsdXRhbnQoZGF0YSwgcG9sbHV0YW50LCBtb250aCA9ICIxMSIpCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMTIiKQpgYGAKCgojIyBjaGIgb3ZlciB0aGUgeWVhcgpgYGB7cn0KcG9sbHV0YW50ID0gImNoYi5hbGwiCgpwbG90LnBvbGx1dGFudChkYXRhLCBwb2xsdXRhbnQsIG1vbnRoID0gIjAxIiwgZGF5ID0gIjAxIiwgdGl0bGUgPSAiMS4gSmFudWFyeSB3aXRoIHNpbHZlc3RlciBmaXJld29yayBwZWFrIikKICAKcGxvdC5wb2xsdXRhbnQoZGF0YSwgcG9sbHV0YW50LCBtb250aCA9ICIwMSIpCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMDIiKQpwbG90LnBvbGx1dGFudChkYXRhLCBwb2xsdXRhbnQsIG1vbnRoID0gIjAzIikKcGxvdC5wb2xsdXRhbnQoZGF0YSwgcG9sbHV0YW50LCBtb250aCA9ICIwNCIpCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMDUiKQpwbG90LnBvbGx1dGFudChkYXRhLCBwb2xsdXRhbnQsIG1vbnRoID0gIjA2IikKcGxvdC5wb2xsdXRhbnQoZGF0YSwgcG9sbHV0YW50LCBtb250aCA9ICIwNyIpCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMDgiKQpwbG90LnBvbGx1dGFudChkYXRhLCBwb2xsdXRhbnQsIG1vbnRoID0gIjA5IikKcGxvdC5wb2xsdXRhbnQoZGF0YSwgcG9sbHV0YW50LCBtb250aCA9ICIxMCIpCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMTEiKQpwbG90LnBvbGx1dGFudChkYXRhLCBwb2xsdXRhbnQsIG1vbnRoID0gIjEyIikKYGBgCgojIyBDSFQgb3ZlciB0aGUgeWVhcgpgYGB7cn0KcG9sbHV0YW50ID0gImNodC5hbGwiCiAgCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMDEiKQpwbG90LnBvbGx1dGFudChkYXRhLCBwb2xsdXRhbnQsIG1vbnRoID0gIjAyIikKcGxvdC5wb2xsdXRhbnQoZGF0YSwgcG9sbHV0YW50LCBtb250aCA9ICIwMyIpCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMDQiKQpwbG90LnBvbGx1dGFudChkYXRhLCBwb2xsdXRhbnQsIG1vbnRoID0gIjA1IikKcGxvdC5wb2xsdXRhbnQoZGF0YSwgcG9sbHV0YW50LCBtb250aCA9ICIwNiIpCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMDciKQpwbG90LnBvbGx1dGFudChkYXRhLCBwb2xsdXRhbnQsIG1vbnRoID0gIjA4IikKcGxvdC5wb2xsdXRhbnQoZGF0YSwgcG9sbHV0YW50LCBtb250aCA9ICIwOSIpCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMTAiKQpwbG90LnBvbGx1dGFudChkYXRhLCBwb2xsdXRhbnQsIG1vbnRoID0gIjExIikKcGxvdC5wb2xsdXRhbnQoZGF0YSwgcG9sbHV0YW50LCBtb250aCA9ICIxMiIpCmBgYAoKIyMgQ08gb3ZlciB0aGUgeWVhcgpgYGB7cn0KcG9sbHV0YW50ID0gImNvLmFsbCIKCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMDEiLCBkYXkgPSAiMDEiLCB0aXRsZSA9ICIxLiBKYW51YXJ5IHdpdGggc2lsdmVzdGVyIGZpcmV3b3JrIHBlYWsiKQogIApwbG90LnBvbGx1dGFudChkYXRhLCBwb2xsdXRhbnQsIG1vbnRoID0gIjAxIikKcGxvdC5wb2xsdXRhbnQoZGF0YSwgcG9sbHV0YW50LCBtb250aCA9ICIwMiIpCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMDMiKQpwbG90LnBvbGx1dGFudChkYXRhLCBwb2xsdXRhbnQsIG1vbnRoID0gIjA0IikKcGxvdC5wb2xsdXRhbnQoZGF0YSwgcG9sbHV0YW50LCBtb250aCA9ICIwNSIpCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMDYiKQpwbG90LnBvbGx1dGFudChkYXRhLCBwb2xsdXRhbnQsIG1vbnRoID0gIjA3IikKcGxvdC5wb2xsdXRhbnQoZGF0YSwgcG9sbHV0YW50LCBtb250aCA9ICIwOCIpCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMDkiKQpwbG90LnBvbGx1dGFudChkYXRhLCBwb2xsdXRhbnQsIG1vbnRoID0gIjEwIikKcGxvdC5wb2xsdXRhbnQoZGF0YSwgcG9sbHV0YW50LCBtb250aCA9ICIxMSIpCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMTIiKQpgYGAKCiMjIDUuIE5PWCBvdmVyIHRoZSB5ZWFyCmBgYHtyfQpwb2xsdXRhbnQgPSAibm94LmFsbCIKCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMDEiLCBkYXkgPSAiMDEiLCB0aXRsZSA9ICIxLiBKYW51YXJ5IHdpdGggc2lsdmVzdGVyIGZpcmV3b3JrIHBlYWsiKQogIApwbG90LnBvbGx1dGFudChkYXRhLCBwb2xsdXRhbnQsIG1vbnRoID0gIjAxIikKcGxvdC5wb2xsdXRhbnQoZGF0YSwgcG9sbHV0YW50LCBtb250aCA9ICIwMiIpCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMDMiKQpwbG90LnBvbGx1dGFudChkYXRhLCBwb2xsdXRhbnQsIG1vbnRoID0gIjA0IikKcGxvdC5wb2xsdXRhbnQoZGF0YSwgcG9sbHV0YW50LCBtb250aCA9ICIwNSIpCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMDYiKQpwbG90LnBvbGx1dGFudChkYXRhLCBwb2xsdXRhbnQsIG1vbnRoID0gIjA3IikKcGxvdC5wb2xsdXRhbnQoZGF0YSwgcG9sbHV0YW50LCBtb250aCA9ICIwOCIpCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMDkiKQpwbG90LnBvbGx1dGFudChkYXRhLCBwb2xsdXRhbnQsIG1vbnRoID0gIjEwIikKcGxvdC5wb2xsdXRhbnQoZGF0YSwgcG9sbHV0YW50LCBtb250aCA9ICIxMSIpCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMTIiKQpgYGAKCiMjIDYuIE8zIG92ZXIgdGhlIHllYXIKYGBge3J9CnBvbGx1dGFudCA9ICJvMy5hbGwiCiAgCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMDEiKQpwbG90LnBvbGx1dGFudChkYXRhLCBwb2xsdXRhbnQsIG1vbnRoID0gIjAyIikKcGxvdC5wb2xsdXRhbnQoZGF0YSwgcG9sbHV0YW50LCBtb250aCA9ICIwMyIpCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMDQiKQpwbG90LnBvbGx1dGFudChkYXRhLCBwb2xsdXRhbnQsIG1vbnRoID0gIjA1IikKcGxvdC5wb2xsdXRhbnQoZGF0YSwgcG9sbHV0YW50LCBtb250aCA9ICIwNiIpCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMDciKQpwbG90LnBvbGx1dGFudChkYXRhLCBwb2xsdXRhbnQsIG1vbnRoID0gIjA4IikKcGxvdC5wb2xsdXRhbnQoZGF0YSwgcG9sbHV0YW50LCBtb250aCA9ICIwOSIpCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMTAiKQpwbG90LnBvbGx1dGFudChkYXRhLCBwb2xsdXRhbnQsIG1vbnRoID0gIjExIikKcGxvdC5wb2xsdXRhbnQoZGF0YSwgcG9sbHV0YW50LCBtb250aCA9ICIxMiIpCmBgYAoKIyMgcG0xMCBvdmVyIHRoZSB5ZWFyCmBgYHtyfQpwb2xsdXRhbnQgPSAic28yLmFsbCIKCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMDEiLCBkYXkgPSAiMDEiLCB0aXRsZSA9ICIxLiBKYW51YXJ5IHdpdGggc2lsdmVzdGVyIGZpcmV3b3JrIHBlYWsiKQogIApwbG90LnBvbGx1dGFudChkYXRhLCBwb2xsdXRhbnQsIG1vbnRoID0gIjAxIikKcGxvdC5wb2xsdXRhbnQoZGF0YSwgcG9sbHV0YW50LCBtb250aCA9ICIwMiIpCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMDMiKQpwbG90LnBvbGx1dGFudChkYXRhLCBwb2xsdXRhbnQsIG1vbnRoID0gIjA0IikKcGxvdC5wb2xsdXRhbnQoZGF0YSwgcG9sbHV0YW50LCBtb250aCA9ICIwNSIpCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMDYiKQpwbG90LnBvbGx1dGFudChkYXRhLCBwb2xsdXRhbnQsIG1vbnRoID0gIjA3IikKcGxvdC5wb2xsdXRhbnQoZGF0YSwgcG9sbHV0YW50LCBtb250aCA9ICIwOCIpCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMDkiKQpwbG90LnBvbGx1dGFudChkYXRhLCBwb2xsdXRhbnQsIG1vbnRoID0gIjEwIikKcGxvdC5wb2xsdXRhbnQoZGF0YSwgcG9sbHV0YW50LCBtb250aCA9ICIxMSIpCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMTIiKQpgYGAKCiMjIHBtMTAgdG8gd2luZApgYGB7cn0KZGRwbHkoZGF0YSx+d2luZF9zcGVlZCxzdW1tYXJpc2UscG0xMC5hbGwubWVhbj1tZWFuKHBtMTAuYWxsKSxzZD1zZChwbTEwLmFsbCkpCmdncGxvdChkYXRhLCBhZXMod2luZF9zcGVlZCxwbTEwLmFsbCwgZ3JvdXAgPSB3aW5kX3NwZWVkKSkgKyBnZW9tX2JveHBsb3QoKSArIHlsaW0oMCwgNzApICsgc3RhdF9zdW1tYXJ5KGZ1bi55PW1lYW4sIGNvbG91cj0iZGFya3JlZCIsIGdlb209InBvaW50IikKCgpkZHBseShkYXRhLH53aW5kLmRlZy5uYW1lLHN1bW1hcmlzZSxwbTEwLmFsbC5tZWFuPW1lYW4ocG0xMC5hbGwpLHNkPXNkKHBtMTAuYWxsKSkKZ2dwbG90KGRhdGEsIGFlcyh3aW5kLmRlZy5uYW1lLHBtMTAuYWxsLCBncm91cCA9IHdpbmQuZGVnLm5hbWUpKSArIGdlb21fYm94cGxvdCgpICsgeWxpbSgwLCA3MCkgKyBzdGF0X3N1bW1hcnkoZnVuLnk9bWVhbiwgY29sb3VyPSJkYXJrcmVkIiwgZ2VvbT0icG9pbnQiKQoKZGRwbHkoZGF0YSx+d2luZC5kZWcubmFtZSxzdW1tYXJpc2Usd2luZF9zcGVlZC5tZWFuPW1lYW4od2luZF9zcGVlZCksc2Q9c2Qod2luZF9zcGVlZCkpCmdncGxvdChkYXRhLCBhZXMod2luZC5kZWcubmFtZSx3aW5kX3NwZWVkLCBncm91cCA9IHdpbmQuZGVnLm5hbWUpKSArIGdlb21fYm94cGxvdCgpICsgeWxpbSgwLCAxNSkgKyBzdGF0X3N1bW1hcnkoZnVuLnk9bWVhbiwgY29sb3VyPSJkYXJrcmVkIiwgZ2VvbT0icG9pbnQiKQpgYGAKCgoKCgo=